/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 * Description: 上机编程认证
 * Note: 缺省代码仅供参考，可自行决定使用、修改或删除
 */
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
#include <iomanip>
#include <unordered_set>
#include <sstream>
#include <set>
using namespace std;
/*
 * 1）考虑到输入大小写不固定，因此需要转成int来去重；此外对int类型的操作比字符串的性能高
 * 2）inline是内联函数关键字，编译阶段将此函数插入到执行的地方，以空间换时间避免了栈帧的频繁创建与销毁
 */
class Solution {
private:
    // 函数用于将无符号整数转换为格式化的十六进制字符串
    std::string uintToHexString(unsigned int value, size_t width = 8) {
        std::ostringstream oss;
        oss << std::hex<<uppercase << std::setw(width) << std::setfill('0') << value;
        return oss.str();
    }
public:

    // 待实现函数，在此函数中填入答题代码;
    vector<string> GetAllFault(const vector<string> &arrayA, const vector<string> &arrayB) {
        //使用set来存储和去重、排序
        set<unsigned int> faultSet;
        //遍历arrayA
        for (const string &fault: arrayA) {
            //fault是引用，避免拷贝降低性能
            unsigned int faultId = stoul(fault, nullptr, 16); //将16进制字符串转换为无符号整数，第二个参数 是一个指向字符指针的指针，函数通过它返回字符串中第一个不能被转换的字符的位置。如果不需要这个信息，可以传递 nullptr 或 0。
            faultSet.insert(faultId);
        }
        //遍历arrayB
        for (const string &fault: arrayB) {
            //fault是引用，避免拷贝降低性能
            unsigned int faultId = stoul(fault, nullptr, 16); //将16进制字符串转换为无符号整数
            faultSet.insert(faultId);
        }

        //将结果转为vector并排序
        vector<string> result;
        for (unsigned int faultId: faultSet) {
            // 转换回十六进制字符串，并确保8个字符长度
            result.push_back(uintToHexString(faultId));
        }
        return result;
    }

};

inline int ReadInt() {
    int number;
    std::cin >> number;
    return number;
}

template<typename T>
inline std::vector<T> ReadVector(int size) {
    std::vector<T> objects(size);
    for (int i = 0; i < size; ++i) {
        std::cin >> objects[i];
    }
    return objects;
}

template<typename T>
inline void WriteVector(const std::vector<T> &objects, char delimeter = ' ') {
    auto it = objects.begin();
    if (it == objects.end()) {
        return;
    }
    std::cout << *it;
    for (++it; it != objects.end(); ++it) {
        std::cout << delimeter << *it;
    }
}

int main() {
    int arrayANum = ReadInt();
    vector<string> arrayA = ReadVector<string>(arrayANum);
    int arrayBNum = ReadInt();
    vector<string> arrayB = ReadVector<string>(arrayBNum);

    Solution solu;
    auto result = solu.GetAllFault(arrayA, arrayB);
    cout << "[";
    WriteVector(result, ' ');
    cout << "]" << endl;
    return 0;
}
